<template>
  <div class="employees-container">
    <div class="app-container" />
    <el-card>
      <h2 style="text-align:center">员工导入</h2>
      <el-alert
        :title="text"
        type="warning"
        show-icon
        :closable="false"
      />
      <UploadExcel :on-success="handleSuccess" :before-upload="beforeUpload" />
    </el-card>
  </div>
</template>

<script>
import { reqImportEmployees } from '@/api/employees'
import Enum from '@/api/constant/employees'
export default {
  name: 'Import',
  computed: {
    type() {
      return this.$route.query.type
    },
    title() {
      return this.type === 'user' ? '员工导入' : '考勤导入'
    },
    text() {
      return this.type === 'user' ? '每次导入仅添加1000名员工,姓名,手机,入职时间,聘用形式为必填项' : '考勤'
    }
  },
  methods: {
    // 上传Excel前的校验函数.限制上传的文件大小
    beforeUpload(file) {
      const isLt1M = file.size / 1024 / 1024 < 1

      if (isLt1M) {
        return true
      }

      this.$message({
        message: 'Please do not upload files larger than 1m in size.',
        type: 'warning'
      })
      return false
    },
    // 日期处理函数
    formatExcelDate(numb, format) {
      const time = new Date((numb - 1) * 24 * 3600000 + 1)
      time.setYear(time.getFullYear() - 70)
      const year = time.getFullYear() + ''
      const month = time.getMonth() + 1 + ''
      const date = time.getDate() + ''
      if (format && format.length === 1) {
        return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
      }
      return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
    },

    // 上传成功后的处理函数 results 表格的数据 header 是表哥的标题
    async handleSuccess({ results, header }) {
      // 员工导入
      if (this.type === 'user') {
        // 做一个关系对照
        const rules = {
          '入职日期': 'timeOfEntry',
          '姓名': 'username',
          '工号': 'workNumber',
          '手机号': 'mobile',
          '聘用形式': 'formOfEmployment',
          '转正日期': 'correctionTime',
          '部门': 'departmentName'
        }
        // console.log(rules)
        // 0,将results中的中文键 全部处理成中文的
        const res = results.map(item => {
        // console.log(item) //原始的键是中文的数据
          const obj = {}
          for (const key in item) {
          // console.log(key) //中文键
          // console.log(item[key]) //值
          // console.log(rules[key]) //英文的键
            const enkey = rules[key]
            if (enkey === 'formOfEmployment') {
            // console.log(item[key])
            // 如果英文的键是 formOfEmployment 需要提交的聘用形式的是 1 或者 2 ,所以如果匹配不到就写个0或者别的数字,不能是1或者2 ,这样就会显示'未知'
              const o = Enum.hireType.find(subItem => subItem.value === item[key])
              o ? obj[enkey] = o.id : obj[enkey] = 0
            } else if (['timeOfEntry', 'correctionTime'].includes(enkey)) { // 处理入职日期和转正日期
              obj[enkey] = this.formatExcelDate(item[key], '-')
              // console.log(this.formatExcelDate(item[key], '-'))
            } else {
              obj[enkey] = item[key]
            }
          }
          return obj
        })
        // console.log(res) // 数组包对象 键是英文的数据
        // 1,发送请求
        await reqImportEmployees(res)
        // 2,回到员工页面
        this.$router.push('/employees')
      // this.$router.back()
      // this.$router.go(-1) //往后一页
      }
      // 考勤导入
      if (this.type === 'att') {
        console.log('考勤导入业务')
      }
    }
  }
}
</script>

<style>

</style>
